[GitHub] Dependabot Grouped version updates ではどのような metadata が取得できるのか確認してみた
こんにちは、CX 事業本部 Delivery 部の若槻です。
下記の記事で紹介されている通り、GitHub Dependabot によりオープンされた Pull Request トリガーのワークフロー実行では、dependabot/fetch-metadata
アクションにより更新の metadata が取得でき、その結果を元に所定のセマンティックバージョニングの更新の Pull Request を自動マージさせるといった運用が可能です。
今回は、Dependabot の Grouped version updates の場合にはどのような metadata が取得できるのか、気になったので確認してみました。
試してみた
次のような Dependabot コンフィグで試してみます。3 つの Version update group を定義しています。
version: 2 updates: - package-ecosystem: npm directory: / schedule: interval: daily groups: aws-sdk-group: patterns: - '@aws-sdk/*' types-group: patterns: - '@types/*' hoge-group: patterns: - luxon - typescript
ワークフローは次のようになります。dependabot/fetch-metadata
により取得した metadata を出力しています。
on: pull_request_target jobs: dependabot: runs-on: ubuntu-latest permissions: pull-requests: read if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }} steps: - name: Dependabot metadata id: dependabot-metadata uses: dependabot/fetch-metadata@v1 - name: Echo Dependabot metadata run: | echo "${{ toJSON(steps.dependabot-metadata.outputs) }}"
通常のバージョンアップデート
まずどのグループにも該当しない、通常のバージョンアップデートの場合です。
{ "dev-dependencies": { - "constructs": "10.2.67" + "constructs": "10.2.69" } }
出力結果は次のようになりました。
{ "updated-dependencies-json": "[{\"dependencyName\":\"constructs\",\"dependencyType\":\"direct:production\",\"updateType\":\"version-update:semver-patch\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"10.2.67\",\"newVersion\":\"10.2.69\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0}]", "dependency-names": "constructs", "dependency-type": "direct:production", "update-type": "version-update:semver-patch", "directory": "/", "package-ecosystem": "npm_and_yarn", "target-branch": "main", "previous-version": "10.2.[6](https://github.com/cm-rwakatsuki/cdk_sample_app/actions/runs/5881816116/job/15951061148?pr=79#step:3:6)[7](https://github.com/cm-rwakatsuki/cdk_sample_app/actions/runs/5881816116/job/15951061148?pr=79#step:3:7)", "new-version": "10.2.6[9](https://github.com/cm-rwakatsuki/cdk_sample_app/actions/runs/5881816116/job/15951061148?pr=79#step:3:9)", "compatibility-score": "0", "maintainer-changes": "false", "dependency-group": "", "alert-state": "", "ghsa-id": "", "cvss": "0" }
整理した内容は以下の通りです。これらの情報を Grouped version updates の場合と比較してみます。
名前 | 値 | 説明 |
---|---|---|
updated-dependencies-json | 省略 | 依存関係の情報 |
dependency-names | constructs |
依存関係の名前 |
dependency-type | direct:production |
依存関係のタイプ |
update-type | version-update:semver-patch |
更新された semver タイプ |
previous-version | 10.2.67 |
更新後のバージョン |
new-version | 10.2.69 |
更新前のバージョン |
dependency-group | - | グループ名 |
Grouped version updates(単一の依存関係が更新)
次に、types-group
グループに該当する単一の依存関係の更新の場合です。
{ "dev-dependencies": { - "@types/node": "20.4.7", + "@types/node": "20.5.0", } }
出力結果は次のようになりました。
{ "updated-dependencies-json": "[{\"dependencyName\":\"@types/node\",\"dependencyType\":\"direct:development\",\"updateType\":\"version-update:semver-minor\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"\",\"newVersion\":\"\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"types-group\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0}]", "dependency-names": "@types/node", "dependency-type": "direct:development", "update-type": "version-update:semver-minor", "directory": "/", "package-ecosystem": "npm_and_yarn", "target-branch": "main", "previous-version": "", "new-version": "", "compatibility-score": "0", "maintainer-changes": "false", "dependency-group": "types-group", "alert-state": "", "ghsa-id": "", "cvss": "0" }
整理した内容は以下の通りです。通常のバージョンアップデートの場合と差分としては、prevVersion
と newVersion
が値なしになっています。
名前 | 値 | 通常との差分 |
---|---|---|
updated-dependencies-json | 省略 | prevVersion と newVersion が値なし |
dependency-names | @types/node |
- |
dependency-type | direct:development |
- |
update-type | version-update:semver-minor |
- |
previous-version | - | 値なし |
new-version | - | 値なし |
dependency-group | types-group |
グループ名あり |
Grouped version updates(複数の依存関係が更新、update-type が同じ)
次に、aws-sdk-group
グループに該当する複数の依存関係の更新の場合です。更新する semver は同じとなります。
{ "dependencies": { - "@aws-sdk/client-lambda": "3.385.0", - "@aws-sdk/client-cognito-identity": "3.385.0", + "@aws-sdk/client-lambda": "3.391.0", + "@aws-sdk/client-cognito-identity": "3.391.0", } }
出力結果は次のようになりました。
{ "updated-dependencies-json": "[{\"dependencyName\":\"@aws-sdk/client-lambda\",\"dependencyType\":\"direct:production\",\"updateType\":\"version-update:semver-minor\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"\",\"newVersion\":\"\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"aws-sdk-group\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0},{\"dependencyName\":\"@aws-sdk/client-cognito-identity\",\"dependencyType\":\"direct:production\",\"updateType\":\"version-update:semver-minor\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"\",\"newVersion\":\"\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"aws-sdk-group\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0}]", "dependency-names": "@aws-sdk/client-lambda, @aws-sdk/client-cognito-identity", "dependency-type": "direct:production", "update-type": "version-update:semver-minor", "directory": "/", "package-ecosystem": "npm_and_yarn", "target-branch": "main", "previous-version": "", "new-version": "", "compatibility-score": "0", "maintainer-changes": "false", "dependency-group": "aws-sdk-group", "alert-state": "", "ghsa-id": "", "cvss": "0" }
整理した内容は以下の通りです。通常のバージョンアップデートの場合との差分としては、prevVersion
と newVersion
が値なしになっており、またdependency-names
にはカンマ区切りで複数の依存関係が含まれています。update-type
は 2 つの更新のものである semver-minor
となっています。
名前 | 値 | 通常との差分 |
---|---|---|
updated-dependencies-json | 省略 | prevVersion と newVersion が値なし。複数の依存関係の更新の情報が含まれている |
dependency-names | @aws-sdk/client-lambda, @aws-sdk/client-cognito-identity |
カンマ区切りで複数の依存関係 |
dependency-type | direct:production |
- |
update-type | version-update:semver-minor |
- |
previous-version | - | 値なし |
new-version | - | 値なし |
dependency-group | aws-sdk-group |
グループ名あり |
Grouped version updates(複数の依存関係が更新、update-type が異なる)
次に、hoge-group
グループに該当する複数の依存関係の更新の場合です。ただし、更新する semver は異なっています。
{ "dev-dependencies": { - "typescript": "5.1.5" + "typescript": "5.1.6" } "dependencies": { - "luxon": "2.5.2" + "luxon": "3.4.0" } }
出力結果は次のようになりました。
{ "updated-dependencies-json": "[{\"dependencyName\":\"luxon\",\"dependencyType\":\"direct:production\",\"updateType\":\"version-update:semver-major\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"\",\"newVersion\":\"\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"hoge-group\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0},{\"dependencyName\":\"typescript\",\"dependencyType\":\"direct:development\",\"updateType\":\"version-update:semver-patch\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"\",\"newVersion\":\"\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"hoge-group\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0}]", "dependency-names": "luxon, typescript", "dependency-type": "direct:production", "update-type": "version-update:semver-major", "directory": "/", "package-ecosystem": "npm_and_yarn", "target-branch": "main", "previous-version": "", "new-version": "", "compatibility-score": "0", "maintainer-changes": "false", "dependency-group": "hoge-group", "alert-state": "", "ghsa-id": "", "cvss": "0" }
整理した内容は以下の通りです。通常のバージョンアップデートの場合との差分としては、prevVersion
と newVersion
が値なしになっており、またdependency-names
にはカンマ区切りで複数の依存関係が含まれています。update-type
は 2 つの更新のうち大きい方の semver の値が指定されています。
名前 | 値 | 通常との差分 |
---|---|---|
updated-dependencies-json | 省略 | prevVersion と newVersion が値なし。複数の依存関係の更新の情報が含まれている |
dependency-names | luxon, typescript |
カンマ区切りで複数の依存関係 |
dependency-type | direct:production |
- |
update-type | version-update:semver-major |
大きい方の semver の値が指定されている |
previous-version | - | 値なし |
new-version | - | 値なし |
dependency-group | hoge-group |
グループ名あり |
結論
- Grouped version updates で、update-type が異なる複数の依存関係の更新の場合は、metadata から取得されるのは大きい方の semver の update-type となる
- これにより「メジャーバージョンアップデートされる依存関係が 1 つ以上含まれる場合は、自動マージをさせたくない」という場合に、
update-type
で判定することができる
おわりに
Dependabot Grouped version updates ではどのような metadata が取得できるのか確認してみました。
update-type
含め Grouped version updates の場合は、通常の場合に比べて細かい差分があるようなので、metadata を利用する場合は意識しておくと良さそうです。
以上